﻿using IQReportes.Models;
using IQReportes.Models.Logica;
using IQReportes.Utils;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace IQReportes.ViewModels
{
    public class UsuarioViewModel
    {
        /*datos del usuario*/
        public string id { get; set; }
        [DisplayName("Usuario")]
        
        public string _usuario { get; set; }
        [DisplayName("Nombre")]
        
        public string nombre { get; set; }
        [DisplayName("Email")]
        
        public string email { get; set; }
        [DisplayName("Clave")]
        public string clave { get; set; }
        [DisplayName("Perfil")]
        public string idPerfil { get; set; }
        public string nombrePerfil { get; set; }

        [DisplayName("Clave Nueva")]
        public string nuevaClave { get; set; }

        public int transaccionesInstitucion { get; set; }
        //DESDE
        public string transaccionesFechaInicial { get; set; }
        //HASTA
        public string transaccionesFechaFinal { get; set; }
        public string transaccionesFechaRangoInicial { get; set; }
        public int transaccionesBotonFechaSeleccion { get; set; }
        public List<ModuloInfoViewModel> modulosTx { get; set; }

        public int panelControlInstitucion { get; set; }
        public List<ModuloInfoViewModel> modulosPC { get; set; }
        public string panelControlFechaInicial { get; set; }

        #region comunes
        public List<ComboValores> radioTiposChart = new List<ComboValores>();
        public List<ComboValores> radioTiposValoresTree = new List<ComboValores>();
        public List<ComboValores> instituciones { get; set; }
        public List<BotonesFechaViewModel> botonesFecha = new List<BotonesFechaViewModel>();
        #endregion


        public UsuarioViewModel(Usuario usuario)
        {
            LogicaParametro logicaParametro = new LogicaParametro();
            this.transaccionesFechaRangoInicial = logicaParametro.getFechaRangoInicialStringTx();
            this.transaccionesFechaFinal = logicaParametro.getFechaFinalStringTx();
            this.panelControlFechaInicial = logicaParametro.getFechaInicialStringPC();

            this.id = usuario.idUsuario + "";
            this._usuario = usuario.vcUsuario;
            this.nombre = usuario.vcNombre;
            this.email = usuario.vcEmail;
            this.idPerfil = usuario.idPerfil+"";
            this.nombrePerfil = usuario.perfil.vcNombre;

            LogicaModulo logicaModulo = new LogicaModulo();
            this.modulosTx = logicaModulo.getListConfiguracionById(usuario.idUsuario, 1);
            this.modulosPC = logicaModulo.getListConfiguracionById(usuario.idUsuario, 2);

            
            transaccionesBotonFechaSeleccion = usuario.inTxBotonDateSeleccion;
            transaccionesInstitucion = usuario.inTxInstitucion;
            panelControlInstitucion = usuario.inPCInstitucion;

            this.botonesFecha = (new LogicaBotonesFecha()).getBotonesFecha();
            this.transaccionesFechaInicial = this.botonesFecha.Where(x => x.id == usuario.inTxBotonDateSeleccion).First().fechaInicio;
            this.instituciones = (new LogicaInstitucion()).getComboInstituciones();
            this.radioTiposValoresTree = (new LogicaValorTree()).getComboValoresTree();
            this.radioTiposChart = (new LogicaTipoChart()).getComboTiposChart();
            
        }

        public Usuario extract(){
            Usuario usuario = new Usuario();
            usuario.idUsuario = Int32.Parse(this.id);
            usuario.vcUsuario = this._usuario;
            usuario.vcNombre = this.nombre;
            usuario.vcEmail = this.email;
            usuario.vcClave = this.clave;
            usuario.idPerfil = Int32.Parse(this.idPerfil);
            usuario.inTxBotonDateSeleccion = this.transaccionesBotonFechaSeleccion;
            usuario.inTxInstitucion = this.transaccionesInstitucion;
            usuario.inPCInstitucion = this.panelControlInstitucion;
            return usuario;
        }

        public UsuarioViewModel() { }
        
        #region seed

        public void seed(){
            
            /*this.instituciones = (new LogicaInstitucion()).getComboInstituciones();
            this.radioTiposValoresTree = (new LogicaValorTree()).getComboValoresTree();
            this.radioTiposChart = (new LogicaTipoChart()).getComboTiposChart();
            cargarBotonosFecha();*/
            //TODO botones fecha
            
            

            /*id = "1";
            _usuario = "jperez";
            nombre = "Juan Perez";
            email = "jperez@gmail.com";
            transaccionesInstitucion = 0; //Todos
            this.idPerfil = "2";

            modulosTx = new List<ModuloInfoViewModel>();
            modulosTx.Add(new ModuloInfoViewModel(1, new List<string>(){"red","yellow","green"},"Tree",Constantes.TREE ,Constantes.TREEMAPEXITOSAS));
            modulosTx.Add(new ModuloInfoViewModel(2, new List<string>(){"red","yellow","green","orange","blue"},"Tipo Transacción",Constantes.PIECHART));
            modulosTx.Add(new ModuloInfoViewModel(3, new List<string>(){"yellow","green","orange","blue"},"Estado Transacción",Constantes.COLUMNCHART));
            modulosTx.Add(new ModuloInfoViewModel(4, new List<string>() { "red", "blue", "black", "orange","green" }, "Monto Transacción", Constantes.TABLECHART));

            modulosPC = new List<ModuloInfoViewModel>();
            modulosPC.Add(new ModuloInfoViewModel(5,new List<string>() { "red", "yellow", "green" }, "Tree", Constantes.TREE, Constantes.TREEMAPEXITOSAS));
            modulosPC.Add(new ModuloInfoViewModel(6,new List<string>() { "red", "yellow", "green", "orange", "blue" }, "No operativos", Constantes.PIECHART));
            modulosPC.Add(new ModuloInfoViewModel(7,new List<string>() { "yellow", "green", "orange", "blue" }, "Antigüedad sin transacciones", Constantes.COLUMNCHART));
            modulosPC.Add(new ModuloInfoViewModel(8,new List<string>() { "red", "blue", "black", "orange", "green" }, "Representantes comerciales", Constantes.TABLECHART));

            var aux = DateTime.Now;
            //aux.ToString
            transaccionesFechaFinal = aux.Month+"/04/" + aux.Year;
            transaccionesFechaInicial = transaccionesFechaFinal;
            transaccionesBotonFechaSeleccion = Constantes.AYER;

            panelControlFechaInicial = transaccionesFechaInicial;
            panelControlInstitucion = transaccionesInstitucion; 

            cargarTiposChart();
            cargarTiposValoresTree();
            cargarInstituciones();
            cargarBotonosFecha();
             * */
        }

        private void cargarBotonosFecha()
        {
            /*
            botonesFecha.Add(new BotonesFechaViewModel("07/01/2013", "07/10/2013", 0, "1D", Constantes.AYER));
            botonesFecha.Add(new BotonesFechaViewModel("06/01/2013", "06/10/2013", 1, "1S", Constantes.SEMANAL));
            botonesFecha.Add(new BotonesFechaViewModel("05/01/2013", "05/10/2013", 2, "1M",Constantes.MENSUAL));
            botonesFecha.Add(new BotonesFechaViewModel("04/01/2013", "04/10/2013", 3 ,"3M", Constantes.TRIMESTRAL));
            botonesFecha.Add(new BotonesFechaViewModel("03/01/2013", "03/10/2013", 4, "6M", Constantes.SEMESTRAL));
            botonesFecha.Add(new BotonesFechaViewModel("02/01/2013", "02/10/2013", 5, "1Y", Constantes.ANUAL));
            botonesFecha.Add(new BotonesFechaViewModel("02/01/2013", "02/10/2013", 6, "Todo", Constantes.TODO));
             */
        }
        private void cargarInstituciones(){
            
            /*instituciones.Add(new ComboValores( 0,"Todos" ) );
            instituciones.Add(new ComboValores( 1,"Interbank" ) );*/
        }
        private void cargarTiposValoresTree()
        {
            
            /*radioTiposValoresTree.Add(new ComboValores( Constantes.TREEMAPEXITOSAS , "Exitosas") );
            radioTiposValoresTree.Add(new ComboValores( Constantes.TREEMAPMONTOS , "Montos"));*/
        }

        private void cargarTiposChart()
        {
            /*radioTiposChart.Add(new ComboValores(Constantes.PIECHART, "Pie"));
            radioTiposChart.Add(new ComboValores(Constantes.COLUMNCHART, "Column"));
            radioTiposChart.Add(new ComboValores(Constantes.LINECHART, "Line"));
            radioTiposChart.Add(new ComboValores(Constantes.TABLECHART, "Table"));*/
        }

        #endregion
    }
}